#ifndef MYTHREADFORSQL_H
#define MYTHREADFORSQL_H

#include <QThread>
#include <QSqlDatabase>
#include "subwidget2.h"    //将列名弄为枚举，也就相当于宏定义了，但枚举效果比宏定义好些
class QSharedMemory;
/**
 * @brief The MyThreadForSql class 这个线程类所掌握的数据库资源，供所有人对数据库的查询
 */
class MyThreadForSql:public QThread
{
    Q_OBJECT
public:
    MyThreadForSql(QSqlDatabase &db, int col=12);
    //处理容器的函数
//    template<class T>
//    T getSequence(int i);
    QVector<double> getSequence(int i);
    void clear_vector();
    //写共享内存
    void SharedMemory_write(QString data);

signals:
    void refresh_vector();
private slots:
    //数据库操作
    //通过日期查询时间
    void query_by_datatime(QStringList data);
    //写数据
    bool update_to_sql(double index, double data);
protected:
    void run() override;
private:
    //初始化容器
    QVector<double> m_v_date;  //这个日期类型的数据，只能暂时用一个QString的容器存一下试试了，但是这样就导致成员函数void push_to_vector(int d, int data)得特殊处理他
    QVector<double> m_v_t_furnace;
    QVector<double> m_v_t_wind1;
    QVector<double> m_v_t_wind2;
    QVector<double> m_v_t_wind3;
    QVector<double> m_v_t_tower1;
    QVector<double> m_v_t_tower2;
    QVector<double> m_v_t_tower3;
    QVector<double> m_v_v_coal;
    QVector<double> m_v_v_grain;
    QVector<double> m_v_rh_after_grain;
    QVector<double> m_v_rh_before_grain;
private:
    void search_by_query(QSqlQuery& query); //通过传入的query进行语句查询
    //处理容器的函数
    void push_to_vector(int d, double data);  //将数据传入到第d个容器内，用于后续可视化用
private:
    QSqlDatabase m_db;
    int m_col;
    QSharedMemory *m_SharedMemory_write;
};

#endif // MYTHREADFORSQL_H
